// import 'dart:io';

// import 'package:flutter/cupertino.dart';
// import 'package:flutter/material.dart';
// import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart';
// import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart';
// import 'package:flutter_baidu_mapapi_search/flutter_baidu_mapapi_search.dart';
// import 'package:flutter_easyloading/flutter_easyloading.dart';
// import 'package:flutter_syt/api/api.dart';
// import 'package:flutter_syt/domain/waystation/way_station_input_bar.dart';
// import 'package:flutter_syt/generated/l10n.dart';
// import 'package:flutter_syt/routes.all.dart';
// import 'package:yyy_route_annotation/yyy_route_annotation.dart';

// import '../../global_easy_loading.dart';
// import 'map_helper.dart';

class MarkerEntity {
  late String id;
  late double long;
  late double lat;
  late String name;
  late String address;
  String icon = "assets/icons/map_loc.png";

  MarkerEntity();
}

// class MapSize {
//   late double width;
//   late double height;
// }

// class MapPage extends StatefulWidget {
//   final List<MarkerEntity> markers;
//   final bool locationCenter;
//   final bool markerCenter;
//   final bool showPanel;
//   final MapSize? size;
//   final bool needRoute;

//   MapPage({
//     this.markers = const [],
//     this.locationCenter = true,
//     this.markerCenter = false,
//     this.showPanel = true,
//     this.size,
//     this.needRoute = true,
//   });

//   @override
//   State<StatefulWidget> createState() => _MapPageState();
// }

// class _MapPageState extends State<MapPage> with AutomaticKeepAliveClientMixin {
//   BMFMapController? controller;
//   List<BMFMarker>? bmfMarkers;
//   double? lat = 39.917215;
//   double? lng = 116.380341;

//   @override
//   void initState() {
//     LocationHelper.startLocation();
//     super.initState();
//   }

//   @override
//   void dispose() {
//     LocationHelper.stopLocation();
//     super.dispose();
//   }

//   void showMakerIfNeeded() async {
//     if (widget.markers.isEmpty) {
//       // debugPrint("Markers data is null ... ");
//       return;
//     }
//     // var list = await API.shared.volunteer.houseList();
//     bmfMarkers = widget.markers.map((e) {
//       return createMarker(e);
//     }).toList();
//     doAddMarker(bmfMarkers!, widget.markerCenter ? bmfMarkers![0] : null);
//   }

//   void doAddMarker(List<BMFMarker> toBeAddMarkers, BMFMarker? centerMarker) {
//     controller?.addMarkers(toBeAddMarkers);
//     controller?.setMapClickedMarkerCallback(callback: (e) {
//       if (!widget.needRoute) {
//         return;
//       }
//       doMarkerClickedEvent(e.Id);
//       routePlan(
//         BMFCoordinate(lat!, lng!),
//         BMFCoordinate(e.position.latitude, e.position.longitude),
//       );
//     });
//     if (centerMarker != null) {
//       updateCoordinate(
//           centerMarker.position.latitude, centerMarker.position.longitude);
//     }
//   }

//   BMFMarker createMarker(MarkerEntity e) {
//     return BMFMarker(
//       position: BMFCoordinate(e.lat, e.long),
//       icon: e.icon,
//       title: "${e.name}",
//       identifier: "${e.id}",
//       visible: true,
//       selected: true,
//     );
//   }

//   bool doMarkerClickedEvent(String markerId) {
//     bool foundMarker = false;
//     bmfMarkers?.forEach((element) {
//       if (element.identifier == markerId || element.Id == markerId) {
//         foundMarker = true;
//         element.updateIcon("assets/icons/icon_arch_current.png");
//       } else {
//         element.updateIcon("assets/icons/map_loc.png");
//       }
//     });
//     return foundMarker;
//   }

//   mapOption(double? latitude, double? longiude) {
//     return BMFMapOptions(
//       center: BMFCoordinate(latitude!, longiude!),
//       zoomLevel: 12,
//       mapPadding: BMFEdgeInsets(left: 30, top: 0, right: 30, bottom: 0),
//       showMapScaleBar: false,
//     );
//   }

//   updateCoordinate(double? latitude, double? longitude) {
//     BMFCoordinate coordinate = BMFCoordinate(latitude!, longitude!);
//     BMFLocation location = BMFLocation(
//         coordinate: coordinate,
//         altitude: 0,
//         horizontalAccuracy: 5,
//         verticalAccuracy: -1.0,
//         speed: -1.0,
//         course: -1.0);

//     BMFUserLocation userLocation = BMFUserLocation(
//       location: location,
//     );

//     controller?.updateLocationData(userLocation);
//     controller?.updateMapOptions(mapOption(latitude, longitude));
//   }

//   updateLocationOverlay() {
//     BMFUserLocationDisplayParam displayParam = BMFUserLocationDisplayParam(
//         locationViewOffsetX: 0,
//         locationViewOffsetY: 0,
//         accuracyCircleFillColor: Colors.red,
//         accuracyCircleStrokeColor: Colors.blue,
//         isAccuracyCircleShow: true,
//         locationViewImage: 'assets/icons/icon_arch_current.png',
//         locationViewHierarchy:
//             BMFLocationViewHierarchy.LOCATION_VIEW_HIERARCHY_BOTTOM);

//     controller?.updateLocationViewWithParam(displayParam);
//   }

//   routePlan(BMFCoordinate start, BMFCoordinate end) async {
//     if (!widget.markerCenter) {
//       return;
//     }
//     // 构造检索参数
//     // 地名规划路线
//     BMFPlanNode from = BMFPlanNode(pt: start);
//     BMFPlanNode to = BMFPlanNode(pt: end);
//     BMFWalkingRoutePlanOption walkingRoutePlanOption =
//         BMFWalkingRoutePlanOption(from: from, to: to);
//     // 检索实例
//     BMFWalkingRouteSearch walkingRouteSearch = BMFWalkingRouteSearch();
//     // 检索回调
//     walkingRouteSearch.onGetWalkingRouteSearchResult(
//         callback: (BMFWalkingRouteResult result, BMFSearchErrorCode errorCode) {
//       print('步行检索回调 errorCode = ${errorCode} \n result = ${result.toMap()}');
//       if (errorCode != BMFSearchErrorCode.NO_ERROR) {
//         var error = "路径规划失败" + "errorCode:${errorCode.toString()}";
//         customShowToast('路径规划失败');
//         debugPrint(error);
//         return;
//       }

//       /// 所有步行路线中第一条路线
//       BMFWalkingRouteLine firstLine = result.routes![0];
//       List<BMFCoordinate> coordinates = [];
//       for (BMFWalkingStep? step in firstLine.steps!) {
//         if (null == step) {
//           continue;
//         }

//         /// 路线经过的路段坐标点
//         if (null != step.points) {
//           coordinates.addAll(step.points!);
//         }
//       }

//       if (polyline != null) {
//         controller?.removeOverlay(polyline!.Id);
//       }
//       polyline = BMFPolyline(
//         coordinates: coordinates,
//         width: 20,
//         indexs: [0],
//         textures: ["assets/images/traffic_texture_smooth.png"],
//         dottedLine: false,
//       );
//       controller?.addPolyline(polyline!);
//       double third = MediaQuery.of(context).size.height / 3;
//       BMFCoordinateBounds coordinateBounds = getVisibleMapRect(coordinates);
//       controller?.setVisibleMapRectWithPaddingHandler(
//         visibleMapBounds: coordinateBounds,
//         insets: EdgeInsets.only(
//             top: third, bottom: third * 2 * 2, left: 100, right: 100),
//         animated: true,
//       );
//     });
//     // 发起检索
//     walkingRouteSearch.walkingRouteSearch(walkingRoutePlanOption);
//   }

//   BMFPolyline? polyline;

//   /// 获取地图显示区域
//   static BMFCoordinateBounds getVisibleMapRect(
//       List<BMFCoordinate> coordinates) {
//     BMFCoordinate fisrt = coordinates[0];
//     double leftBottomX = fisrt.latitude;
//     double leftBottomY = fisrt.longitude;
//     double rightTopX = fisrt.latitude;
//     double rightTopY = fisrt.longitude;

//     for (BMFCoordinate coordinate in coordinates) {
//       if (coordinate.latitude < leftBottomX) {
//         leftBottomX = coordinate.latitude;
//       }

//       if (coordinate.longitude < leftBottomY) {
//         leftBottomY = coordinate.longitude;
//       }

//       if (coordinate.latitude > rightTopX) {
//         rightTopX = coordinate.latitude;
//       }

//       if (coordinate.longitude > rightTopY) {
//         rightTopY = coordinate.longitude;
//       }
//     }

//     BMFCoordinate leftBottom = BMFCoordinate(leftBottomX, leftBottomY);
//     BMFCoordinate rightTop = BMFCoordinate(rightTopX, rightTopY);

//     BMFCoordinateBounds coordinateBounds =
//         BMFCoordinateBounds(northeast: rightTop, southwest: leftBottom);

//     return coordinateBounds;
//   }

//   @override
//   Widget build(BuildContext context) {
//     super.build(context);
//     var size = MediaQuery.of(context).size;
//     return Scaffold(
//       body: StreamBuilder(
//         stream: LocationHelper.result(),
//         builder: (context, AsyncSnapshot<LocationData> snapshot) {
//           if (snapshot.hasData) {
//             lat = snapshot.data?.location?.latitude;
//             lng = snapshot.data?.location?.longitude;
//             print('location-> $lat, $lng，${snapshot.data?.location?.address}');
//             if (widget.locationCenter) {
//               updateCoordinate(lat, lng);
//               LocationHelper.stopLocation();
//             }
//           }
//           String address = S.of(context).Positioning;
//           if (Platform.isIOS) {
//             if (snapshot.data?.location?.address != null) {
//               address =
//                   "${snapshot.data?.location?.country}${snapshot.data?.location?.province}${snapshot.data?.location?.city}${snapshot.data?.location?.district}${snapshot.data?.location?.street}";
//             }
//           } else {
//             address = snapshot.data?.location?.address ?? address;
//           }
//           return Stack(
//             children: [
//               Container(
//                 width: widget.size == null ? size.width : widget.size!.width,
//                 height: widget.size == null ? size.height : widget.size!.height,
//                 child: BMFMapWidget(
//                   onBMFMapCreated: (BMFMapController controller) {
//                     this.controller = controller;
//                     this.controller?.showUserLocation(widget.locationCenter);
//                     showMakerIfNeeded();
//                     if (widget.locationCenter) {
//                       updateLocationOverlay();
//                     }
//                   },
//                   mapOptions: BMFMapOptions(
//                     center: BMFCoordinate(lat!, lng!),
//                     zoomLevel: 12,
//                     zoomEnabled: widget.locationCenter,
//                     showZoomControl: false,
//                     mapPadding:
//                         BMFEdgeInsets(left: 30, top: 40, right: 30, bottom: 40),
//                     showMapScaleBar: false,
//                   ),
//                 ),
//               ),
//               if (widget.showPanel)
//                 Positioned(
//                   bottom: 0,
//                   child: Container(
//                     padding: EdgeInsets.symmetric(horizontal: 24, vertical: 26),
//                     height: 146,
//                     width: size.width,
//                     decoration: BoxDecoration(
//                       color: Colors.white,
//                       borderRadius: BorderRadius.only(
//                         topLeft: Radius.circular(24),
//                         topRight: Radius.circular(24),
//                       ),
//                     ),
//                     child: Column(
//                       crossAxisAlignment: CrossAxisAlignment.start,
//                       children: [
//                         Row(
//                           crossAxisAlignment: CrossAxisAlignment.center,
//                           children: [
//                             Image.asset('assets/icons/icon_arch_pos.png',
//                                 width: 13, height: 16),
//                             Padding(
//                               padding: EdgeInsets.only(left: 8),
//                               child: Text(
//                                 address,
//                                 maxLines: 1,
//                                 overflow: TextOverflow.ellipsis,
//                                 style: TextStyle(
//                                     fontSize: 14, color: Colors.black),
//                               ),
//                             ),
//                           ],
//                         ),
//                         Padding(
//                           padding: EdgeInsets.only(top: 24),
//                           child: WayStationSearchBar(
//                             enableInput: false,
//                             tapCallback: () async {
//                               var result = await RouteManager.push(
//                                   context,
//                                   RoutMapping.wayStationSearch(
//                                       lat ?? 0, lng ?? 0));
//                               if (result.result == null) {
//                                 return;
//                               }
//                               if (result.result is MarkerEntity) {
//                                 MarkerEntity e = result.result;
//                                 if (doMarkerClickedEvent(result.result.id)) {
//                                   routePlan(
//                                     BMFCoordinate(lat!, lng!),
//                                     BMFCoordinate(e.lat, e.long),
//                                   );
//                                   return;
//                                 }
//                                 var toBeAddMarker = createMarker(
//                                     (result.result as MarkerEntity));
//                                 doAddMarker([toBeAddMarker], toBeAddMarker);
//                                 routePlan(
//                                   BMFCoordinate(lat!, lng!),
//                                   BMFCoordinate(e.lat, e.long),
//                                 );
//                               }
//                               debugPrint('page result not support');
//                             },
//                           ),
//                         )
//                       ],
//                     ),
//                   ),
//                 ),
//               if (widget.showPanel)
//                 Positioned(
//                   bottom: 175,
//                   right: 15,
//                   child: GestureDetector(
//                     onTap: () => LocationHelper.startLocation(),
//                     child: Container(
//                       alignment: Alignment.center,
//                       width: 36,
//                       height: 36,
//                       decoration: BoxDecoration(
//                           color: Colors.white,
//                           borderRadius: BorderRadius.circular(18)),
//                       child: Icon(
//                         Icons.my_location,
//                         size: 16,
//                       ),
//                     ),
//                   ),
//                 ),
//             ],
//           );
//         },
//       ),
//     );
//   }

//   @override
//   bool get wantKeepAlive => true;
// }
